home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / recio212.zip / recio.h < prev    next >
C/C++ Source or Header  |  1995-01-29  |  12KB  |  310 lines

  1. /****************************************************************************
  2.    MODULE: recio.h
  3.   PURPOSE: record input/output header file included in application
  4. COPYRIGHT: (C) 1994-1995, William Pierpoint
  5.   VERSION: 2.12
  6.   RELEASE: January 29, 1995
  7. *****************************************************************************/
  8.  
  9. #ifndef RECIO_H
  10. #define RECIO_H
  11.  
  12. #ifndef FILE
  13. #include <stdio.h>
  14. #endif
  15.  
  16. #ifndef time_t
  17. #include <time.h>
  18. #endif
  19.  
  20. #ifndef SIZE_T_MAX
  21. #define SIZE_T_MAX (~(size_t)0)
  22. #endif
  23.  
  24. typedef struct {
  25.         int      r_fd;       /* descriptor */
  26.         unsigned r_flags;    /* status flags */
  27.         FILE    *r_fp;       /* file pointer */
  28.   const char    *r_fname;    /* pointer to name of file */
  29.         long     r_recno;    /* record number */
  30.         unsigned r_fldno;    /* field number */
  31.         size_t   r_colno;    /* column number */
  32.         size_t   r_recsiz;   /* size of record buffer */
  33.         size_t   r_reclen;   /* length of record buffer */
  34.         char    *r_recp;     /* pointer to record buffer */
  35.         size_t   r_fldsiz;   /* size of field buffer */
  36.         char    *r_fldp;     /* pointer to field buffer */
  37.         int      r_fldch;    /* field separator character */
  38.         int      r_txtch;    /* text delimiter character */
  39.   const char    *r_tmfmt;    /* pointer to time format string */
  40.         int      r_cxtno;    /* context number */
  41. } REC;
  42.  
  43. typedef struct {
  44.         int      r_fd;       /* descriptor */
  45.         unsigned r_fldno;    /* field number  */
  46.         size_t   r_colno;    /* column number */
  47.         long     r_recno;    /* record number */
  48. } rpos_t;
  49.  
  50. /* constant expression macros */
  51. #define RECBUFSIZ   80       /* minimum size of record buffer */
  52. #define FLDBUFSIZ   20       /* minimum size of field buffer */
  53. #define RECFLDCH   ' '       /* record field separator character */
  54. #define RECTXTCH   ' '       /* text delimiter character */
  55.  
  56. #define ROPEN_MAX    8       /* max no of rec streams open at same time */
  57. #define R_READ       0       /* read mode */
  58. #define R_WRITE      1       /* write/append mode */
  59.  
  60. #ifdef __BORLANDC__
  61. #define NSBUFSIZ    34       /* string buffer sized for ltoa, dtoa, etc */
  62. #else
  63. #error set NSBUFSIZ for this compiler!  See Section 3.6 in DESIGN.TXT
  64. #endif
  65. extern char _r_nsbuf[NSBUFSIZ]; /* numeric to string conversion buffer */
  66.  
  67. /* enumerate errors */
  68. enum {
  69.     R_EINVAL=1,              /* invalid argument value */
  70.     R_EINVDAT,               /* invalid data */
  71.     R_EINVMOD,               /* invalid read or write mode */
  72.     R_EMISDAT,               /* missing data */
  73.     R_ENOMEM,                /* could not allocate memory */
  74.     R_ENOPUT,                /* failed put to stream */
  75.     R_ERANGE,                /* data out of range */
  76.     R_EFAULT                 /* unknown error */
  77. };
  78.  
  79. /* enumerate warnings */
  80. enum {
  81.     R_WEMPSTR=1,             /* data string empty */
  82.     R_WNOREG,                /* unable to register function (atexit full) */
  83.     R_WWIDTH,                /* column width too small for data */
  84.     R_WTMFMT,                /* date/time data incomplete */
  85.     R_WFAULT                 /* unknown warning */
  86. };
  87.  
  88. /* define static record streams */
  89. extern REC *recin;           /* recin  record pointer */
  90. extern REC *recout;          /* recout record pointer */
  91. extern REC *recerr;          /* recerr record pointer */
  92. extern REC *recprn;          /* recprn record pointer */
  93.  
  94. #define RECIN       -1       /* recin  context number */
  95. #define RECOUT      -2       /* recout context number */
  96. #define RECERR      -3       /* recerr context number */
  97. #define RECPRN      -4       /* recprn context number */
  98.  
  99. /* record status flags definitions */
  100. #define _R_COL       1       /* beginning column flag (bit 0) */
  101. #define _R_WRT       2       /* read/write stream flag (bit 1) */
  102. #define _R_TXT       4       /* current field text char indicator (bit 2) */
  103. #define _R_EOF     128       /* end-of-file indicator (bit 7) */
  104. #define _R_ERR     256       /* error indicator (bits 8-11) */
  105. #define _R_WRN    4096       /* warning indicator (bits 12-15) */
  106.  
  107. #define _R_ERRMAX   15       /* maximum error number */
  108. #define _R_WRNMAX   15       /* maximum warning number */
  109.  
  110. /* functions implemented as macros */
  111. #define rskipfld(rp)     (rskipnfld((rp), 1))
  112. #define rresetrec(rp)    (rsetrecstr((rp), rrecs(rp)))
  113. #define rnames(rp)       ((rp)->r_fname)
  114. #define rrecs(rp)        ((rp)->r_recp)
  115. #define rflds(rp)        ((rp)->r_fldp)
  116. #define rrecno(rp)       ((rp)->r_recno)
  117. #define rfldno(rp)       ((rp)->r_fldno)
  118. #define rcolno(rp)       ((rp)->r_colno + rbegcolno(rp))
  119. #define rcxtno(rp)       ((rp)->r_cxtno)
  120. #define rbegcolno(rp)    ((rp)->r_flags & _R_COL)
  121. #define ristxtfld(rp)    ((rp)->r_flags & _R_TXT)
  122. #define reof(rp)         ((rp)->r_flags & _R_EOF)
  123.  
  124. #define rgetfldpos(rp, pos)  (_rgetfldpos((rp), &(pos)))
  125. #define rsetfldpos(rp, pos)  (_rsetfldpos((rp), &(pos)))
  126.  
  127. #define rgeti(rp)        (rbgeti( (rp), 10))
  128. #define rgetl(rp)        (rbgetl( (rp), 10))
  129. #define rgetui(rp)       (rbgetui((rp), 10))
  130. #define rgetul(rp)       (rbgetul((rp), 10))
  131.  
  132. #define rcgeti(rp, begcol, endcol)  (rcbgeti( (rp), (begcol), (endcol), 10))
  133. #define rcgetl(rp, begcol, endcol)  (rcbgetl( (rp), (begcol), (endcol), 10))
  134. #define rcgetui(rp, begcol, endcol) (rcbgetui((rp), (begcol), (endcol), 10))
  135. #define rcgetul(rp, begcol, endcol) (rcbgetul((rp), (begcol), (endcol), 10))
  136.  
  137. #define rputi(rp, num)   (rbputi( (rp), 10, (num)))
  138. #define rputl(rp, num)   (rbputl( (rp), 10, (num)))
  139. #define rputui(rp, num)  (rbputui((rp), 10, (num)))
  140. #define rputul(rp, num)  (rbputul((rp), 10, (num)))
  141.  
  142. #define rcputi(rp, begcol, endcol, num)  (rcbputi( (rp), (begcol), (endcol), 10, (num)))
  143. #define rcputl(rp, begcol, endcol, num)  (rcbputl( (rp), (begcol), (endcol), 10, (num)))
  144. #define rcputui(rp, begcol, endcol, num) (rcbputui((rp), (begcol), (endcol), 10, (num)))
  145. #define rcputul(rp, begcol, endcol, num) (rcbputul((rp), (begcol), (endcol), 10, (num)))
  146.  
  147. #define strimbegs(str)       (scntrimbegs((str), ' ', SIZE_T_MAX))
  148. #define strimends(str)       (scntrimends((str), ' ', SIZE_T_MAX))
  149. #define strims(str)          (scntrims((str), ' ', SIZE_T_MAX))
  150. #define sctrimbegs(str, ch)  (scntrimbegs((str), (ch), SIZE_T_MAX))
  151. #define sctrimends(str, ch)  (scntrimends((str), (ch), SIZE_T_MAX))
  152. #define sctrims(str, ch)     (scntrims((str), (ch), SIZE_T_MAX))
  153. #define scpys(dst, src)      (_scpys(&(dst), src))
  154. #define scats(dst, src)      (_scats(&(dst), src))
  155.  
  156. #ifdef __cplusplus
  157. extern "C" {
  158. #endif
  159. /* function prototypes */
  160. /* source: recio.c */
  161. extern void  rclose(REC *rp);
  162. extern int   rcloseall(void);
  163. extern int   risvalid(REC *rp);
  164. extern REC  *ropen(const char *filename, const char *mode);
  165. extern void  rsetbegcolno(REC *rp, int colno);
  166. extern void  rsetcxtno(REC *rp, int cxtno);
  167. extern void  rsetfldch(REC *rp, int ch);
  168. extern void  rsettmfmt(REC *rp, const char *fmt);
  169. extern void  rsettxtch(REC *rp, int ch);
  170.  
  171. /* source: rerr.c */
  172. extern void  rclearerr(REC *rp);
  173. extern int   rerror(REC *rp);
  174. extern char *rerrstr(REC *rp);
  175. extern int   rseterr(REC *rp, int errnum);
  176. extern void  rseterrfn(void(*rerrfn)(REC *rp));
  177. extern char *rstrerror(int errnum);
  178. extern void  rinit(void(*rerrfn)(REC *rp), void(*rwarnfn)(REC *rp));
  179.  
  180. /* source: remsg.c */
  181. extern void rerrmsg(REC *rp);
  182.  
  183. /* source: rwarn.c */
  184. extern void  rclearwarn(REC *rp);
  185. extern int   rwarning(REC *rp);
  186. extern char *rwarnstr(REC *rp);
  187. extern int   rsetwarn(REC *rp, int warnum);
  188. extern void  rsetwarnfn(void(*rwarnfn)(REC *rp));
  189. extern char *rstrwarning(int warnum);
  190.  
  191. /* source: rwmsg.c */
  192. extern void rwarnmsg(REC *rp);
  193.  
  194. /* source: rget.c */
  195. extern char    *rgetrec(REC *rp);
  196. extern void     _rgetfldpos(REC *rp, rpos_t *pos);
  197. extern void     _rsetfldpos(REC *rp, const rpos_t *pos);
  198. extern void     rsetfldsiz(REC *rp, size_t fldsize);
  199. extern void     rsetfldstr(REC *rp, const char *s);
  200. extern void     rsetrecsiz(REC *rp, size_t recsize);
  201. extern void     rsetrecstr(REC *rp, const char *s);
  202. extern unsigned rskipnfld(REC *rp, unsigned num);
  203. extern unsigned rnumfld(REC *rp);
  204.  
  205. /* source: rgetf.c */
  206. extern float  rgetf(REC *rp);
  207. extern double rgetd(REC *rp);
  208.  
  209. /* source: rgets.c */
  210. extern int    rgetc(REC *rp);
  211. extern char  *rgets(REC *rp);
  212.  
  213. /* source: rgett.c */
  214. extern time_t rgett(REC *rp);
  215. extern struct tm rgettm(REC *rp);
  216. extern time_t sftotime(const char *s, const char *fmt);
  217. extern struct tm sftotm(const char *s, const char *fmt);
  218. extern time_t tmtotime(struct tm);
  219. extern struct tm timetotm(time_t);
  220.  
  221. /* source: rbget.c */
  222. extern int           rbgeti( REC *rp, int base);
  223. extern unsigned int  rbgetui(REC *rp, int base);
  224. extern long          rbgetl( REC *rp, int base);
  225. extern unsigned long rbgetul(REC *rp, int base);
  226.  
  227. /* source: rcgetf.c */
  228. extern float  rcgetf(REC *rp, size_t begcol, size_t endcol);
  229. extern double rcgetd(REC *rp, size_t begcol, size_t endcol);
  230.  
  231. /* source: rcgets.c */
  232. extern int    rcgetc(REC *rp, size_t col);
  233. extern char  *rcgets(REC *rp, size_t begcol, size_t endcol);
  234.  
  235. /* source: rcgett.c */
  236. extern time_t rcgett(REC *rp, size_t begcol, size_t endcol);
  237. extern struct tm rcgettm(REC *rp, size_t begcol, size_t endcol);
  238.  
  239. /* source: rcbget.c */
  240. extern int           rcbgeti( REC *rp, size_t begcol, size_t endcol, int base);
  241. extern unsigned int  rcbgetui(REC *rp, size_t begcol, size_t endcol, int base);
  242. extern long          rcbgetl( REC *rp, size_t begcol, size_t endcol, int base);
  243. extern unsigned long rcbgetul(REC *rp, size_t begcol, size_t endcol, int base);
  244.  
  245. /* source: rput.c */
  246. extern void rputrec(REC *rp);
  247.  
  248. /* source: rputf.c */
  249. extern void rputf(REC *rp, float f);
  250. extern void rputd(REC *rp, double d);
  251.  
  252. /* source: rputs.c */
  253. extern void rputc(REC *rp, int ch);
  254. extern void rputs(REC *rp, const char *str);
  255.  
  256. /* source: rputt.c */
  257. extern void rputt(REC *rp, time_t time);
  258. extern void rputtm(REC *rp, struct tm t);
  259.  
  260. /* source: rbput.c */
  261. extern void rbputi(REC *rp, int base, int i);
  262. extern void rbputui(REC *rp, int base, unsigned int ui);
  263. extern void rbputl(REC *rp, int base, long l);
  264. extern void rbputul(REC *rp, int base, unsigned long ul);
  265.  
  266. /* source: rcputs.c */
  267. extern void rcputc(REC *rp, size_t col, int ch);
  268. extern void rcputs(REC *rp, size_t begcol, size_t endcol, const char *str);
  269.  
  270. /* source: rcputf.c */
  271. extern void rcputf(REC *rp, size_t begcol, size_t endcol, float f);
  272. extern void rcputd(REC *rp, size_t begcol, size_t endcol, double d);
  273.  
  274. /* source: rcputt.c */
  275. extern void rcputt(REC *rp, size_t begcol, size_t endcol, time_t time);
  276. extern void rcputtm(REC *rp, size_t begcol, size_t endcol, struct tm t);
  277.  
  278. /* source: rcbput.c */
  279. extern void rcbputi(REC *rp, size_t begcol, size_t endcol, int base, int i);
  280. extern void rcbputui(REC *rp, size_t begcol, size_t endcol, int base, unsigned int ui);
  281. extern void rcbputl(REC *rp, size_t begcol, size_t endcol, int base, long l);
  282. extern void rcbputul(REC *rp, size_t begcol, size_t endcol, int base, unsigned long ul);
  283.  
  284. /* source: rfix.c */
  285. extern void rbfixi( REC *rp, int base);
  286. extern void rbfixui(REC *rp, int base);
  287. extern void rbfixl( REC *rp, int base);
  288. extern void rbfixul(REC *rp, int base);
  289. extern void rfixc(REC *rp);
  290. extern void rfixf(REC *rp);
  291. extern void rfixd(REC *rp);
  292. extern void rfixi(REC *rp);
  293. extern void rfixl(REC *rp);
  294. extern void rfixt(REC *rp);
  295. extern void rfixui(REC *rp);
  296. extern void rfixul(REC *rp);
  297.  
  298. /* source: rstr.c */
  299. extern char *scntrimbegs(char *str, int ch, size_t num);
  300. extern char *scntrimends(char *str, int ch, size_t num);
  301. extern char *scntrims(char *str, int ch, size_t num);
  302. extern char *_scpys(char **dst, const char *src);
  303. extern char *_scats(char **dst, const char *src);
  304.  
  305. #ifdef  __cplusplus
  306. }
  307. #endif
  308.  
  309. #endif
  310.